#ifndef __VECTOR3D_H__
#define __VECTOR3D_H__

#include <cmath>

#include <iostream>

namespace t2c2 {
	
struct Vector3D {
	
	Vector3D(void);
	Vector3D(const double,const double,const double);
	Vector3D(const Vector3D&);
	~Vector3D(void);

	double dot_product(const Vector3D&) const;
	Vector3D scalar_product(double) const;
	Vector3D cross_product(const Vector3D&) const;
	Vector3D sub_vect(const Vector3D&) const;
	Vector3D normalize(void) const;
	const double length(void) const;
	double distance(const Vector3D&) const;
	
	void show(void) const { std::cout << "X :" << x << " , y: " << y << " , z: " << z << std::endl; }
	
	/* Simple Operators */
	Vector3D& operator=(const Vector3D&);
	bool operator==(const Vector3D&);
	const double operator*(const Vector3D&) const;
	const Vector3D operator*(const double) const;
	const Vector3D operator+(const Vector3D&) const;
	const double operator[](const int&) const;
	const Vector3D operator-(void) const;
	const Vector3D operator-(const Vector3D&) const;

	/* Data */
	double x,y,z;
	
	
};

}

#endif
